GASでメールを送信をするのは簡単ですが、メール本文を整形するのが面倒です。
しかし、Googleドキュメントでメールのテンプレートを作れば簡単です。またメール本文の一部を変数として、送付する人の名前などを書き換える差し込み機能を使うこともできます。
テキストメールだけでなくHTMLメールでも同じようにGoogleドキュメントでテンプレートを作成して差し込みメールを出すことも可能です。
今回説明するのは、
- Googleドキュメントでメールのテンプレートを作る
- メール本文の一部を送信する人によって書き換える
- HTMLメールの送信
についてです。
実際に送付されるHTMLメールはこんな感じです。赤字にしている部分が差し込みです。画像も添付しています。
テキストメールのサンプルは下記となります。テキストメールなので画像はなく、リンクも使えないのでURLの記載となります。
メールのテンプレート作成する
先ずは、Googleドキュメントでメールのテンプレートを作成します。
テキストメールのテンプレート
テキストメールは、見たまんまなのでとても簡単です。
赤字が差し込み用の変数です。
差し込みとするのが赤字の部分です。プログラムで判断できる文字列であれば何でも構いませんが、
- [value1] ・・・ 氏名
- [value2] ・・・ 日付
- [value3] ・・・ 時間
としています。
HTMLメールのテンプレート
続いて、HTMLメールのテンプレートとなります。橙色がHTMLタグです。
GASでメールを送信する
サンプルプログラムは、下記の3パートから構成されています。
- Googleドキュメントを読み込む
- 読み込んだコンテンツから特定文字列を置換する
- HTMLメールを送信する
HTMLメールで送信しますが、HTMLメールが受信できない環境であればテキストメールが表示されます。
サンプルコードは下記になります。
function testMail() { /*************************************************** * Googleドキュメントを読み込む ***************************************************/ //GoogleドキュメントのID var textDocId = '...1234567890...' var htmlDocId = '...abcdefghij...' //テキストメール テンプレートの取得 var txtDoc = DocumentApp.openById(textDocId) var txtTemplate = txtDoc.getBody().getText() //HTMLメール テンプレートの取得 var htmlDoc = DocumentApp.openById(htmlDocId) var htmlTemplate = htmlDoc.getBody().getText() /*************************************************** * メール本文の特定文字列を置換する ***************************************************/ //変数の設定 var var1 = 'タカハシ' var var2 = '2012年5月14日(金)' var var3 = '13:00' //プレーンテキスト内の変数を置換 var bodyText = txtTemplate.replace('[value1]',var1).replace('[value2]',var2).replace('[value3]',var3) //HTML内の変数を置換 var bodyHtml = htmlTemplate.replace('[value1]',var1).replace('[value2]',var2).replace('[value3]',var3)
/*************************************************** * HTMLメールを送信する ***************************************************/ var mailTo = 'sample_mail@gmail.com' var subject = 'テストメール' GmailApp.sendEmail( mailTo, subject, bodyText, { htmlBody:bodyHtml } ) }
Googleドキュメントを読み込む
Googleドキュメントで作成したテンプレートをIDを指定して読み込みますが、6行目がテキストメール、7行目がHTMLメールのGoogleドキュメントのIDとなります。
6. var textDocId = '...1234567890...'
7. var htmlDocId = '...abcdefghij...'
Googleドキュメントの編集URLが下記の場合、赤字の部分がIDです。
Googleドキュメントで作成したテンプレートの値に変更してください。
10行目でGoogleドキュメントで作成したテキストメールのテンプレートを上記のIDを指定して開いて、11行目で内容をテキストとして変数 txtTemplate に代入しています。
10. var txtDoc = DocumentApp.openById(textDocId)
11. var txtTemplate = txtDoc.getBody().getText()
HTMLメールのテンプレートも同じように14-15行目で変数 htmlTemplate に代入します。
これで、Googleドキュメントの読み込みは完了です。
メール本文の特定文字列を置換する
差し込み部分の説明です。
21-23行目でメールに差し込む値を定義しています。
21. var var1 = 'タカハシ'
22. var var2 = '2012年5月14日(金)'
23. var var3 = '13:00'
26行目がテキストメール・テンプレートから読み込んだ値の置換、29行目がHTMLメール・テンプレートから読み込んだ値の置換です。
26. var bodyText = txtTemplate.replace('[value1]',var1),.....省略.....
27.
28. //HTML内の変数を置換
29. var bodyHtml = htmlTemplate.replace('[value2]',var1)......省略.....
replaceを使って文字列を置換しています。
Strings.replace('置換前の文字列','置換後の文字列')
変数をひとつにして説明すると、下記の例では、txtTemplate にある [value1] を探して 細野 に置換した内容を bodyText に代入しています。
var bodyText = txtTemplate.replace('[value1]','細野')
差し込みが多い場合には下記のように分割することもできます。
var bodyText = txtTemplate.replace('[value1]',var1) var bodyText = bodyText.replace('[value2]',var2) var bodyText = bodyText.replace('[value3]',var3)
HTMLメールを送信する
メールを送信するのには GmailApp.sendEmail を使います。
GmailApp.sendEmail(送付先メアド, メールタイトル, 本文, {オプション})
34-35行目で mailTo に送信先アドレスを、subject にメールタイトルを代入しています。
自分のメールアドレスに変更してください。
35. var subject = 'テストメール'
37-44行目がメール送信部分です。
HTMLメールを送信するので、オプション部に htmlBody:'HTMLメール本文' を指定し、本文 にはHTMLが表示できない場合のテキスト文を指定しています。
こうしておけば、HTMLメールを表示できない環境の場合には、テキストメールが表示されます。
38. mailTo,
39. subject,
40. bodyText,
41. {
42. htmlBody:bodyHtml
43. }
44. )
テキストメールを送信する
テキストメールとして送信する場合は、サンプルプログラムのオプション部を削除して下記のように変更します。
GmailApp.sendEmail( mailTo, subject, bodyText )
シートの文字装飾された文字列をHTMLメールで送信する
コメントに質問を受けたのでスプレッドシートから値と文字装飾(色、太文字)を読み込んでHTMLメールを送信するサンプルプログラムを作成しました。
読み込むシートには、A1セルに赤字太文字で"象と散歩"と入力しています。
プログラムでHTMLタグを生成する
セルの文字色は、.getFontColor()で取得できます。太字かどうかは、.getFontWeight()でわかります。戻り値が、boldなら太字、太文字でなければnormalです。
次にHTMLの生成ですが、セルの文字が太文字かを判断して、太文字であれば<strong>タグで囲みます。文字色は必ずセットされているので、<p style='color:#カラーコード>で括ります。
文字色は必ずセットされるので、装飾文字のパターンは太字の有無の2パターンですが、文字色が「黒」か「他の色」かの4パターンで生成されるHTMLを下表に示します。
字幅 | 太字 | 文字色 | HTML |
---|---|---|---|
象と散歩 | なし | 黒 | <p style='color:#000000'>象と散歩</p> |
象と散歩 | なし | 赤 | <p style='color:#ff0000'>象と散歩</p> |
象と散歩 | 太字 | 黒 | <p style='color:#000000'><strong>象と散歩</strong></p> |
象と散歩 | 太字 | 青 | <p style='color:#0000ff'><strong>象と散歩</strong></p> |
下記がサンプルコードとなります。
function sendFormattingEmail() { // シート名を指定 let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1") // セルの内容を取得 let cellValue = sheet.getRange("A1").getValue() // セルの文字色を取得 let cellFontColor = sheet.getRange("A1").getFontColor() // セルの文字が太字かどうかを判定 let cellIsBold = sheet.getRange("A1").getFontWeight() === "bold" Logger.log(cellValue) Logger.log(cellFontColor) Logger.log(cellIsBold) // 宛先メールアドレス let mailTo = "sample_email@gmail.com" // メールの件名 let subject = "文字色と太文字を指定したメール" // セルの値を取得 let body = cellValue // 太字の場合はstrongタグで囲む if (cellIsBold) { body = "<strong>" + body + "</strong>" } // 文字色をstyle属性で指定 body = "<p style='color:" + cellFontColor + "'>" + body + "</p>" Logger.log(body) // HTML形式のメールを送信 GmailApp.sendEmail(mailTo,subject,'',{htmlBody:body}) }
上記を実行すると、セルに設定された文字装飾(文字色と太字有無)で、HTMLメールを送信することができます。(2023.7.23追記)
GASの基礎を学べる参考図書
ある程度プログラミンがわかっていれば、WEBやYoutubeでも十分に調べられると思いますが、初歩的なところからであれば参考図書は有効な学習手段です。
「詳解! Google Apps Script完全入門 [第3版]」は、プラグラミング初心者にわかりやすく説明されています。GASを最初に学ぶ一冊として良書です。
Udemy オススメ講座
【新IDE対応】Google Apps Script(GAS)の基礎を完全習得
講師:事務職たらこ
印象に残りやすい手書き風スライドを用いGASの基本的なプログラミングを気軽に学ぶことができる。本講座でGASを活用した自動化ができるレベルにはなれないが、基礎としては十分。